# -*- coding:utf-8 -*-
# @FileName : app\models\task_execution.py
# @Time     : 2025/11/28
# @Author   : 天空之城
"""任务执行模型文件

此模块定义任务执行模型，使用SQLAlchemy进行ORM映射。
"""
from enum import Enum
from app.extensions import db


class TaskExecutionStatus(Enum):
    """任务执行状态枚举"""
    PENDING = "pending"
    RUNNING = "running"
    COMPLETED = "completed"
    FAILED = "failed"


class TaskExecution(db.Model):
    """任务执行模型
    
    定义任务执行表结构，每次模型调用工具执行任务都会生成一条记录。
    """
    __tablename__ = 'task_executions'
    
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 执行ID
    conversation_id = db.Column(db.Integer, db.ForeignKey('conversations.id'), nullable=False)  # 关联对话ID
    status = db.Column(db.Enum(TaskExecutionStatus), default=TaskExecutionStatus.PENDING)  # 执行状态
    summary = db.Column(db.Text, nullable=True)  # 执行总结报告
    assertion_result = db.Column(db.Boolean, default=False)  # 断言是否通过
    assertion_reason = db.Column(db.Text, nullable=True)  # 断言的具体理由
    created_at = db.Column(db.DateTime, default=db.func.current_timestamp())  # 创建时间
    updated_at = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())  # 更新时间
    
    # 关系
    conversation = db.relationship('Conversation', backref=db.backref('task_executions', lazy=True))  # 关联的对话
    steps = db.relationship('TaskStep', backref='task_execution', lazy=True, order_by='TaskStep.step_number')  # 关联的执行步骤
    
    def __repr__(self):
        """返回任务执行对象的字符串表示"""
        return f'<TaskExecution {self.id} - Conversation {self.conversation_id} - {self.status.value}>'